{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "ccbcc7ca",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第一次计算的梯度: tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
      "        1., 1.])\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "\n",
    "# 创建一个包含 0 到 19 的张量\n",
    "x = torch.arange(20, dtype=torch.float32, requires_grad=True)\n",
    "\n",
    "# 第一次计算\n",
    "y = x.sum()  # 计算 x 的和\n",
    "y.backward()  # 反向传播\n",
    "print(\"第一次计算的梯度:\", x.grad)  # 输出 x 的梯度\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "47b375d7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第二次计算的梯度: tensor([ 0.,  2.,  4.,  6.,  8., 10., 12., 14., 16., 18., 20., 22., 24., 26.,\n",
      "        28., 30., 32., 34., 36., 38.])\n"
     ]
    }
   ],
   "source": [
    "x.grad.zero_()\n",
    "# 第二次计算\n",
    "y = (x ** 2).sum()  # 计算 x 的平方和\n",
    "y.backward()  # 反向传播\n",
    "print(\"第二次计算的梯度:\", x.grad)  # 输出 x 的梯度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ea68f8c6",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "9cce7b91",
   "metadata": {},
   "source": [
    "x.grad.zero_()\n",
    "#第三次计算\n",
    "y=x.mean()   #在 PyTorch 中，torch.autograd.grad 或 backward() 方法在处理输出时，通常要求输出是标量（即只有一个元素的张量）。当输出是标量时，PyTorch 可以直接计算梯度并将其返回给输入张量。如果输出不是标量，必须显式地提供 grad_outputs 参数。\n",
    "y.backward()\n",
    "print(x.grad)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "37b72589",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:yzk] *",
   "language": "python",
   "name": "conda-env-yzk-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.20"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
